const Jimp = require("jimp");
const moment = require("moment");

// 添加不同宽度的青色边框并添加文字到图片
async function customFrameAndAddText(
  imagePath,
  text,
  padding = [10, 10, 50, 10],
  outputFilePath = "./jimpImages"
) {
  try {
    // 解构padding数组
    const [paddingTop, paddingRight, paddingBottom, paddingLeft] = padding;

    // 读取图片
    const image = await Jimp.read(imagePath);

    // 图片的原始宽度和高度
    const originalWidth = image.bitmap.width;
    const originalHeight = image.bitmap.height;

    // 计算新图片的尺寸，考虑不同边距
    const newWidth = originalWidth + paddingLeft + paddingRight;
    const newHeight = originalHeight + paddingTop + paddingBottom;

    // 创建一个新的空白图片作为容器，带有青色边框
    const framedImage = new Jimp(newWidth, newHeight, "#ffffff"); // 青色的RGB值

    // 计算原图在新图中的起始位置（考虑边距）
    const xStart = paddingLeft;
    const yStart = paddingTop;

    // 将原图粘贴到新图中，根据边距定位
    framedImage.composite(image, xStart, yStart);

    // 加载字体
    const font = await Jimp.loadFont(Jimp.FONT_SANS_32_BLACK);

    // 测量文字宽度以确定居中位置
    // const textWidth = Jimp.measureText(framedImage, font, text);
    const centerX = paddingRight; 
    const centerY = newHeight - paddingBottom + paddingTop;

    // 在图片上添加文字
    framedImage.print(font, centerX, centerY, text);

    // 获取当前日期并格式化
    const formattedDate = moment().format("YYYY-MM-DD");

    // 获取图片名称
    const imageName = imagePath.split("/").pop();

    // 构建包含日期的输出路径
    const outputPath = `${outputFilePath}/${formattedDate}/${imageName}`;

    // 写入新图片
    await framedImage.writeAsync(outputPath);

    console.log(`图片处理完成，已保存为: ${outputPath}`);
  } catch (error) {
    console.error("处理图片时发生错误:", error);
  }
}

// 使用示例
customFrameAndAddText("./test.png", "Custom Frame Text");
